/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package org.jfonia.view.elements;

import java.util.List;
import org.jfonia.connect5.basics.ValueNode;
import org.jfonia.connect5.basics.Node;
import org.jfonia.model.ISequence;
import org.jfonia.model.elements.MusicalElement;
import percussiongenerator.model.Pair;

/**
 *
 * @author Rik Bauwens
 */
public interface IElement extends Node
{
        public boolean hasFocus();

        public boolean contains(MusicalElement musicalElement);

        public boolean isEmpty();

        public void setSelected(boolean selected);

        public int getX();

        public int getY();

        public int getWidth();

        public int getHeight();

        public int getBegin();

        public int getEnd();

        public void setFrameXNode(ValueNode<Double> frameXNode);

        public void setFrameWidthNode(ValueNode<Double> frameWidthNode);

        public ValueNode<Double> getPreferredWidthNode();

        public ValueNode<Integer> getBeginNode();

        public ValueNode<Integer> getEndNode();

        public void requestFocus();

        public void caretPrevious(boolean keepSelected);

        public void caretNext(boolean keepSelected);

        public void shiftCaret(int posCount, boolean keepSelected);

        public List<Pair<ISequence, MusicalElement>> getMusicalElements();

        public int getTickPosition();
}
